Skip to main content

Integration Testing Approach using Usage Patterns of Global Variables

· 4 min read
후세인무하메드입팔
신영술
이우진
담당교수

논문 정보

  • 제목: Integration Testing Approach using Usage Patterns of Global Variables
  • 저자: Muhammad Iqbal Hossain, Youngsul Shin, Woo Jin Lee (School of EECS, Kyungpook National University)
  • 학회/저널: 제37회 한국정보처리학회 춘계학술대회 논문집 제19권 1호
  • 발행일: 2012-04
  • DOI: (정보 없음)
  • 주요 연구 내용: 전역 변수의 '정의-사용(definition-use)' 관계를 포함하도록 호출 그래프(Call Graph)를 확장하고, 불필요한 경로를 제거하기 위해 제어 흐름 그래프(CFG)를 축소하여 결합하는 테스트 모델을 설계했다.
  • 주요 결과 및 결론: 제안된 모델은 전역 변수와 관련된 경로의 실행을 보장하면서도 그래프 축소 기법을 통해 테스트 케이스 생성 시의 복잡도를 완화할 수 있음을 보였다.
  • 기여점: 기존의 수동적인 전역 변수 테스트 접근법의 민감화(sensitization) 문제를 해결하기 위해 자동화 가능한 모델을 제시하고, 대규모 프로그램에서의 테스트 경로 폭증 문제를 그래프 축소로 대응했다.

요약

초록

전역 변수는 프로그램의 어느 부분에서나 읽거나 수정할 수 있어 모든 사용 가능성을 추론하기 어렵다. 때로는 변수 간 또는 변수와 함수 간의 강한 결합(tight coupling)을 유발한다. 본 논문은 전역 변수 테스트를 위한 테스트 케이스를 생성하기 위해, 호출 그래프(Call Graph)와 제어 흐름 분석(Control Flow Analysis)을 사용하여 모델을 설계하는 데 중점을 둔다.

서론

전역 변수는 호출자/피호출자 관계가 없는 코드 섹션 간의 정보 전달을 위해 널리 사용되며 코드 작성을 단순화한다. 그러나 이는 접근 제어 부족과 암시적 결합을 초래하여 테스트를 어렵게 만든다. 분산 시스템이나 병렬 컴퓨팅 환경에서는 데이터 의존성을 추적하고 동기화하는 것이 필수적이다. 기존 연구들(Asakura et al., White and Leung)은 실행 순서 제어나 방화벽(firewall) 개념을 도입했으나, 테스트 값 선택이 개발자의 경험에 의존하거나 자동화에 한계가 있었다. 본 연구는 제어 흐름 테스트와 데이터 흐름 테스트를 통합하고, 확장된 호출 그래프를 통해 자동화가 가능한 접근 방식을 제안한다.

배경

프로그램의 복잡도는 경로(path)의 수에 의존하며, 대규모 프로그램은 방대한 경로로 인해 테스트가 복잡해진다. 이를 해결하기 위해 정적 호출 그래프(Static Call Graph)를 기반으로 하되, 단순한 함수 호출 관계뿐만 아니라 전역 변수와의 관계를 표현할 수 있는 확장이 필요하다.

모델 아키텍처 / 방법론

Figure 1

핵심 구조/방법

본 논문의 접근 방식은 크게 네 단계로 나뉜다(논문의 Figure 1 참조).

  1. 소스 코드 파싱 및 전역 변수 식별
  2. 전역 변수 사용 정보를 포함한 확장된 호출 그래프(Extended Call Graph) 생성
  3. 각 함수에 대한 제어 흐름 그래프(CFG) 생성 및 축소(Reduction)
  4. 축소된 CFG를 결합하여 최종 테스트 모델 생성 Figure 2

확장된 호출 그래프 (Extended Call Graph)

기본적인 정적 호출 그래프는 변수와의 관계나 서브루틴의 순서를 보여주지 않는다. 본 연구에서는 전역 변수가 함수 내에서 정의되거나 사용되는 관계(Definition-Use)를 점선으로, 함수 호출을 실선으로 표현하여 그래프를 확장했다. 논문의 Figure 2는 생산자-소비자(Producer-Consumer) 문제에 이를 적용한 예시를 보여준다.

그래프 축소 기법 (Graph Reduction)

테스트 경로의 폭증을 막기 위해 전역 변수와 직접적인 관련이 없는 구문들을 축소한다.

  • 순차 축소(Sequence reduction): 전역 변수의 정의-사용이 발생하지 않는 인접한 구문들의 시퀀스(s0,s1,s2.....sns_{0},s_{1},s_{2}.....s_{n})를 하나의 기본 블록(Basic block)으로 묶는다. 이 시퀀스에서 sis_{i}의 실행은 항상 si+1s_{i+1}의 실행으로 이어진다.
  • 루프 축소(Loop reduction): 전역 변수에 영향을 미치지 않는 루프에 대해 루프 융합(fusion), 교환(interchange), 타일링(tiling), 풀기(unrolling) 등의 최적화 기법을 적용한다.
  • 분기 축소(Branch reduction): 전역 변수와 관련 없는 if-else나 switch 문을 최적화하여 경로 수를 줄인다. Figure 3

실험 결과 및 적용 예시

논문은 '생산자-소비자(Producer-Consumer)' 문제를 사례 연구로 사용했다.

  • 주요 설정: countermutex가 전역 변수로 선언된 상황에서 main, producer, consumer, insert_item, remove_item 등의 함수 간 관계를 분석했다.
  • 분석 결과: sem_wait 함수는 어떤 전역 변수와도 관계가 없으므로 프로세스에서 생략해도 영향이 없음을 확인했다. Figure 2의 확장된 호출 그래프를 통해 mutexmain에서 정의되고 producer, consumer 등에서 사용되는 관계를 명확히 시각화했다.
  • 최종 모델: 각 함수의 축소된 CFG를 호출 그래프에 따라 결합하여 최종 테스트 모델(Figure 3)을 생성했다. 이 모델은 전역 변수 테스트에 필요한 모든 경로의 실행을 보장한다.

결론

본 연구는 전역 변수의 부작용을 해결하기 위한 통합 테스트 접근 방식을 제시했다. 함수형 테스트에서 전역 변수를 식별하고 정의-사용 관계를 이용해 호출 그래프를 확장했으며, 그래프 축소 기법을 통해 효율적인 제어 흐름 모델을 생성했다. 향후 연구로는 이 모델로부터 구체적인 테스트 케이스를 생성하는 기법을 개발하고, 그래프 축소 최적화에 대한 추가적인 연구가 필요하다.